const express = require("express")
const router = express.Router()
const jwt = require("jsonwebtoken")
const articleDB = require("../../db/article")
const adminDB = require("../../db/admin")
const path = require("path")
const fs = require("fs")

// 密钥
const cort = "coderxinxin2022-04-15"

// 鉴权是否具有删除权限
// 身份校验 检验是否具有发表权限
router.use(async (req, res, next) => {
  try {
    // 校验token
    // 获取请求头里面的token
    let token = (req.headers.authorization || "").slice(7)
    let info = null
    // 捕获错误
    try {
      info = jwt.verify(token, cort)
      const doc = await adminDB.findById(info._id)
      // 检测超管身份
      if (!doc.deletepower)
        return res.send({
          code: 4,
          mes: "您不具有删除权限",
        })
      if (!doc)
        return res.send({
          code: 4,
          mes: "系统检测到该账号已被注销",
        })
      // 检测密码是否更新
      if (info.pass !== doc.pass)
        return res.send({
          code: 4,
          mes: "密码已更新,请重新登录",
        })
      next()
    } catch (error) {
      console.log(error)
      return res.send({
        code: 4,
        mes: "登录信息已过期,请重新登录",
      })
    }
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试",
    })
  }
})

// 删除文章
router.post("/delete", async (req, res) => {
  try {
    const { articleID } = req.body
    // 查看该文章是否存在
    const doc = await articleDB.findById(articleID)
    if (!doc)
      return res.send({
        code: 2,
        mes: "该文章已被删除",
      })
    // 删除文章
    await articleDB.findByIdAndRemove(articleID)
    // 删除本地文件
    fs.rm(
      path.join(__dirname, `../../static${doc.textURL}`),
      { recursive: true },
      (err) => {}
    )

    res.send({
      code: 0,
      mes: "该文章删除成功",
    })
  } catch (error) {
    console.log(error)
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试",
    })
  }
})

module.exports = router
